package com.common.www.controller.sale;

import com.alibaba.fastjson.JSON;
import org.springframework.boot.base.jpa.service.IBaseService;
import com.common.www.bean.entity.Result;
import com.common.www.bean.entity.district.ProvinceCity;
import com.common.www.bean.entity.sale.SaleFactory;
import com.common.www.bean.entity.sale.SaleFactoryPrice;
import com.common.www.controller.base.DefaultCrudController;
import com.common.www.data.NetCode;
import com.common.www.service.auth.UserService;
import com.common.www.service.district.ProvinceCityService;
import com.common.www.service.sale.SaleFactoryPriceService;
import com.common.www.service.sale.SaleFactoryService;
import com.common.www.utils.ParamsUtils;
import com.common.www.utils.R;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiImplicitParams;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.CrossOrigin;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;

import java.util.HashMap;
import java.util.List;

@CrossOrigin
@RestController
@RequestMapping(value = {"mgt/saleFactory"})
@Api(tags = "MGT 销售品类管理接口")
public class MGTSaleFactoryController extends DefaultCrudController<SaleFactory, Long> {
    @Autowired
    private SaleFactoryService service;
    @Autowired
    private SaleFactoryPriceService priceService;
    @Autowired
    private UserService userService;
    @Autowired
    private ProvinceCityService provinceCityService;

    protected IBaseService getService() {
        return service;
    }

    @ApiImplicitParams({
            @ApiImplicitParam(name = "json", value = "String", defaultValue = ""),
    })
    @RequestMapping(value = "/saveByJson", method = RequestMethod.POST)
    public Result saveByJson(String json) {
        SaleFactory entity = JSON.parseObject(json, SaleFactory.class);
        ProvinceCity provinceCity = provinceCityService.getRepository().findByFlagAndCode(1,Long.valueOf(entity.getCode()));
        if (provinceCity == null) {
            throw new RuntimeException("未找到所选城市，请联系管理员");
        }
        if (provinceCity.getParent() != null){
            entity.setProvince(provinceCity.getParent().getName());
        }
        entity.setCity(provinceCity.getName());

        entity = service.save(entity);
        if (entity != null) {
            List<SaleFactoryPrice> prices = entity.getPriceList();
            if (prices != null && prices.size() > 0) {
                for (SaleFactoryPrice price : prices) {
                    price.setSaleFactory(entity);
                    priceService.save(price);
                }
            }
        }

        return R.ok(entity);
    }

    @ApiOperation("批量删除启用")
    @ApiImplicitParams({
            @ApiImplicitParam(name = "ids", value = "String", defaultValue = ""),
            @ApiImplicitParam(name = "operate", value = "1.删除 2.启用", defaultValue = ""),
    })
    @RequestMapping(value = "/batchDelete", method = RequestMethod.POST)
    public Result batchDelete(Long[] ids, Integer operate) {
        if (ParamsUtils.isInputEmpty(ids, operate)) {
            return R.returnCode(NetCode.CODE_INPUT_OMIT);
        }
        for (int i = 0; i < ids.length; i++) {
            SaleFactory authUser = service.findOne(ids[i]);
            if (authUser != null) {
                if (operate == 1) {
                    authUser.setFlag(0);
                } else if (operate == 2) {
                    authUser.setFlag(1);
                }
                service.save(authUser);
            }
        }
        return R.ok();
    }

    @ApiOperation(value = "逻辑删除", notes = "参数为JSON数据对象")
    @ApiImplicitParams({
            @ApiImplicitParam(name = "id", value = "id", dataType = "long", paramType = "query"),
    })
    @RequestMapping(value = "/deleteByLogic", method = RequestMethod.POST)
    public Result deleteByLogic(Long id) {
        //删除关联数据
        HashMap hashMap = new HashMap();
        hashMap.put("saleFactory.id",id);
        List<SaleFactoryPrice> priceList = priceService.getList(hashMap,null);
        for (SaleFactoryPrice price : priceList){
            priceService.deleteById(price.getId());
        }
        service.deleteById(id);
        return R.ok();
    }

    @ApiOperation(value = "逻辑删除批量", notes = "参数为JSON数据对象")
    @ApiImplicitParams({
            @ApiImplicitParam(name = "ids", value = "8,28", dataType = "long", paramType = "query"),
    })
    @RequestMapping(value = "/deletesByLogic", method = RequestMethod.POST)
    public Result deletesByLogic(Long[] ids) {
        service.deleteByIds(ids);
        return R.ok();
    }



}

